import pandas as pd
"""
合并：
    探索虚拟姓名数据
步骤：
    1.先使用DataFrame()将数据表格化显示
    2.使用pd的函数进行处理，一般用concat()和merge()
主要使用到的方法：
    concat():可以沿一个轴将对象连接到一起
    merge():可以根据一个或多个键将不同的DataFrame()中的行连接到一起
    join():如果为‘ inner ’得到两表的交集，‘outer’ 得到两表的并集，如果有join_axes参数传入，可以根据指定的轴来对齐数据
    combine_first():将重复数据编排在一起，用一个对象的值填充到另一个对象的值
"""
def explore_name():
    # 创建数据
    raw_data_1 = {
        'subject_id': ['1', '2', '3', '4', '5'],
        'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
        'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}

    raw_data_2 = {
        'subject_id': ['4', '5', '6', '7', '8'],
        'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
        'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']}

    raw_data_3 = {
        'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
        'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}
    # 将上面数据分别命名为data1,data2，data3
    data1 = pd.DataFrame(raw_data_1,columns=['subject_id','first_name','last_name'])
    data2 = pd.DataFrame(raw_data_2,columns=['subject_id','first_name','last_name'])
    data3 = pd.DataFrame(raw_data_3,columns=['subject_id','test_id'])
    # 2.将data1和data2两个数据按照行的维度进行合并，命名为all_data
    all_data = pd.concat([data1,data2])
    print('数据按行的维度进行合并：',all_data)
    # 3.将data1和data2两个数据按照列的维度进行合并，命名为all_data_col
    all_data_col = pd.concat([data1,data2],axis=1)
    print('按照列的维度进行合并：',all_data_col)
    # 4.打印data3
    print('打印data3:',data3)
    # 5.按照subject_id的值对all_data和data3作合并
    print('按照subject_id的值对all_data和data3做合并：\n',pd.merge(all_data,data3,on='subject_id'))
    # 6.对data1和data2按照subject_id做连接
    print('对data1和data2按照subject_id连接：\n',pd.merge(data1,data2,on='subject_id',how='inner'))
    # 7.找到data1和data2合并之后的所有匹配结果
    print('data1和data2合并之后的所有匹配结果：\n',pd.merge(data1,data2,on='subject_id',how='outer'))
explore_name()